package cn.tedu.rabbitmq.consumer;

import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.nio.charset.StandardCharsets;
import java.util.Date;

/**
 * 1. 容器bean对象（可以消费者盗用业务实现，持久层实现数据读写）
 * 2. 使用接口约束实现方法，使用注解明确表述监听（队列名称）
 * 3. 方法入参就是消费的消息
 */
@Component
public class DemoConsumner {
    // rabbitmq整合中，使用注解让消费代码绑定队列
//    @RabbitListener(queues = "demo-queue")
    @RabbitListener(queues = "dlx-queue")
    // 第一种接参方式 反序列化后的 消息body数据(发的是User 入参就是User 发的是String,入参就是String)
    /*public void consume(String msg) {
        System.out.println("消费者收到消息：" + msg);
    }*/
    // 第二种接参方式 ,接受框架封装的Message对象(包含消息头 消息属性properties 以及未进行序列化的消息体)
    public void consume(Message message/*Channel channel*/) {
        //消息头属性
        message.getMessageProperties();
        //消息体 和你直接接收String区别在于没有序列化
        byte[] body = message.getBody();
        String msg = new String(body, StandardCharsets.UTF_8);
        //实现消费逻辑
        System.out.println("消费者接收到的消息数据:" + msg);
        System.out.println(new Date().toLocaleString());
    }
}
